{FlexCat

{El generador flexible de cat�logos

{

{Versi�n 1.2

Jochen Wiedmann

Se garantiza el permiso para realizar y distribuir copias intactas o modificadas de este manual y del programa FlexCat siguiendo los t�rminos de la “GNU General Public License” siempre que se preserven, en todas las copias, las notas de Derechos de Autor y �sta nota de permiso, adem�s de distribuir tambien la “GNU General Public License” (en el fichero ‘COPYING’).

El autor no da garant�a alguna de que el programa que se describe es esta documentaci�n as� como los resultados producidos por �l sean correctos. El autor no se puede responsabilizar por cualquier da�o debido al uso de este software.

La traducci�n a Castellano ha sido realizada por Antonio J. Gomez Gonzalez


\input texinfo

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1 Vistazo

A partir del Workbench 2.1 el Amiga ofrece un sistema bastante c�modo para usar programas en diferentes idiomas: La locale.library. (A esto se le llama localizaci�n, que es para lo que vale el nombre.)

La idea es sencilla: Eliges un idioma, el castellano la mayor�a de los casos, y escribes tu programa de la misma forma que que lo hac�as sin localizaci�n a excepci�n de que las cadenas constantes se substituyen por ciertas llamadas a funci�n. Otra llamada a una funci�n permite que los usuarios elijan otro idioma al iniciar el programa. (Esta �ltima llamada lee un fichero externo, el llamado cat�logo, y hace que se lean las cadenas o textos del cat�logo en vez de las predefinidas).

Estos cat�logos son independientes del programa. Todo lo que necesitas para a�adir otro idioma es crear un nuevo cat�logo, lo cual se puede hacer en cualquier momento sin falta de modificar el programa.

Sin embargo hay tareas adicionales para el programador: Necesita crear los cat�logos, las cadenas predefinidas, y algo de c�digo fuente para manejarlas. (Las funciones que se mencionaron antes). Flexcat est� dise�ado para hacer esto de una forma sencilla y casi autom�tica sin perder flexibilidad, especialmente al crear el c�digo fuente. Lo veremos m�s claro con un ejemplo:

Supongamos que queremos escribir un ‘HolaMundoLocal.c’. Nuestro programa final quedar�a como:

 #include <stdio.h>
 #include <stdlib.h>
 #include <HolaMundoLocal_Cat.h>	/* �Debes incluirlo! */
 #include <clib/exec_protos.h>

 struct Library *LocaleBase;

 void main(int argc, char *argv[])
 { /*	Abre la librer�a t� mismo aunque el compilador permita la    */
   /*  apertura autom�tica. NO salgas si falla OpenLibrary, en ese */
   /*  caso usaremos las cadenas internas.			    */
   LocaleBase = OpenLibrary("locale.library", 38);

   OpenHolaMundoLocalCatalog(NULL, NULL);

   printf("%s\n", GetHolaMundoLocalString(msgHola));

   CloseHolaMundoLocalCatalog();
   if (LocaleBase)
      CloseLibrary(LocaleBase);
 }

F�jate que es casi igual que el ‘HolaMundo.c’ original a excepci�n de que sustituye la cadena "�Hola mundo!" por una llamada a una funci�n y que contiene algunas inicializaciones adicionales.

El programa anterior usa la constante msgHola. La llamada a GetHolaMundoLocalString hace la sustituci�n por la cadena correspondiente. Estas constantes y cadenas est�n definidas en el fichero Descripci�n de Cat�logo. (see section Ficheros de descripci�n de cat�logo). Siempre se empieza creando un fichero de ese tipo, el ‘HolaMundoLocal.cd’, que podr�a ser como el siguiente:

 ; Por supuesto, se permiten comentarios. Toda l�nea que empieze
 ; con un punto y coma se supone un comentario.
 ;
 ; El idioma de las cadenas internas:
 #language espa�ol
 ;
 ; Versi�n del cat�logo, se usa en la llamada a Locale/OpenCatalog().
 ; Esto es diferente a Exec/OpenLibrary(): 0 significa cualquier
 ; versi�n de cat�logo, �otro, significa coincidir exactamente!
 #version 0
 ;
 ; Esto define una cadena y el ID que permite usarla.
 ; El n�mero 4 indica que la cadena no debe tener menos de 4
 ; caracteres.
 msgHola (/4/)
 �Hola mundo!

Usando FlexCat puedes crear otros dos ficheros a partir de la descripci�n de cat�logo: el fichero include ‘HolaMundoLocal_Cat.h’ que define las constantes (ID), y el ‘HolaMundoLocal_Cat.c’, el cual contiene un vector con las cadenas y las funciones OpenHolaMundoLocalCatalog(), GetHolaMundoLocalString() y CloseHolaMundoLocalCatalog(). No necesitas saber como son, s�lo c�mo usarlas.� Especialmente si no necesitas saber nada sobre la locale.library!

En cambio, podr�as estar interesado en el funcionamiento de estos ficheros o incluso podr�as querer cambiarlos. Esta es la diferencia entre FlexCat y los dem�s generadores de cat�logos: FlexCat no necesita usar un formato interno especial para la creaci�n de esos ficheros. En su lugar usa ficheros externos, las Descripciones de fuente. Esto permite, por ejemplo, el uso de cat�logos con AmigaDOS 2.0. see section Ficheros de descripci�n de fuente. Si usas las descripciones de c�digo fuente de la distribuci�n de FlexCat puedes crear los ficheros fuente con los siguientes comandos:

FlexCat HolaMundoLocal.cd HolaMundoLocal_Cat.c=C_c_V21’
    ‘FlexCat HolaMundoLocal.cd HolaMundoLocal_Cat.h=C_h.sd

Una vez que tengas tu programa listo usar�s FlexCat de nuevo para crear los ficheros Traducci�n de Cat�logo, uno para cada idioma que quieras soportar. (Excepto para espa�ol, que es interno). See section Ficheros traducci�n de cat�logo. Vamos a crear una traducci�n de cat�logo en ingl�s.

FlexCat HolaMundoLocal.cd NEWCTFILE English.ct

Este fichero ser�a como sigue:

 ## version
 ## language
 ## codeset 0
 ; Por supuesto, se permiten comentarios. Toda l�nea que empieze
 ; con un punto y coma se supone un comentario.
 ;
 ; El idioma de las cadenas internas:
 ;
 ; Versi�n del cat�logo, se usa en la llamada a Locale/OpenCatalog().
 ; Esto es diferente a Exec/OpenLibrary(): 0 significa cualquier
 ; versi�n de cat�logo, �otro, significa coincidir exactamente!
 ;
 ; Esto define una cadena y el ID que permite usarla.
 ; El n�mero 4 indica que la cadena no debe tener menos de 4
 ; caracteres.
 msgHola

 ; �Hola mundo!

Como ves, se parece mucho a la descripci�n de cat�logo. FlexCat incluye los comentarios de la descripci�n de cat�logo, incluso los que no tienen mucho sentido: F�jate en el comentario de la longitud de cadena, el cual no deber�a aparecer ah� ya que esa informaci�n s�lo debe estar en la descripci�n de cat�logo. Todo lo que tienes que hacer ahora es rellenar la informaci�n sobre la versi�n (se espera una cadena t�pica de versi�n como ‘$VER: English.catalog 1.0 (22.05.94)’, el idioma de la traducci�n de cat�logo (aqu� para ingl�s ser�a ‘english’), el codeset (que deber�a ser siempre 0 por ahora, para m�s detalles mira en Locale/Catalogs() ) y, por supuesto, las propias cadenas. FlexCat incluye las cadenas originales en forma de comentarios de forma que siempre sepas que es lo que tienes que poner.

Finalmente, creas los cat�logos con comandos como:

FlexCat HolaMundoLocal.cd English.ct CATALOG English.catalog

F�jate que �no necesitas el programa o los ficheros fuentes creados con FlexCat para los cat�logos! Puedes crear nuevos cat�logos en cualquier momento. Es usual ofrecer distribuciones con un fichero CatalogoNuevo.ct, de forma que los usuarios puedan crear sus propios cat�logos.

Pero, �qu� ocurre si cambias el programa m�s tarde? Simplemente edita la descripci�n de cat�logo y usa FlexCat para actualizar las traducciones de cat�logo:

FlexCat HolaMundoLocal.cd English.ct NEWCTFILE English.ct

Todo lo que tienes que hacer ahora es introducir las nuevas cadenas si es necesario.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2 Instalaci�n

FlexCat est� escrito en Ansi-C puro (excepto la localizaci�n), por ello, deber�a correr en cualquier Amiga y con suerte en otras m�quinas despu�s de compilarlo. (La localizaci�n queda como comentarios en ese caso). Esto tambien es aplicable a los programas: Flexcat est� escrito utiliz�ndose a s� mismo. Todas las descripciones de fuente distribuidas deber�an crear programas que se ejecuten en cualquier Amiga, e incluso en cualquier m�quina. (Por supuesto, debes asegurarte de que la variable LocaleBase tiene un valor ‘NULL’ en este �ltimo caso). Sin embargo, la localizaci�n s�lo es posible a partir del Workbench 2.1 porque la locale.library no estaba disponible antes.

No es imposible ofrecer localizaci�n sin la locale.library: Los ficheros de descripci�n de fuente ‘C_c_V20.sd’ y ‘C_h_V20.sd’ ofrecen un ejemplo en el que se usa la iffparse.library para sustituir la locale.library si �sta no est� disponible. Esto permite Localizaci�n en el Workbench 2.0. See section Fuentes de FlexCat en programas en C.

Instalar FlexCat es simple: Copia el programa en un directorio en tu camino de b�squeda y elige un lugar para las descripciones de fuente que necesites. (�stas son los ficheros que tienen nombres de la forma ‘xx_yy.sd’, donde ‘xx’ es el lenguaje de programaci�n). Si quieres usar FlexCat en otro idioma distinto del ingl�s tambien necesitas copiar los cat�logos correspondientes. Ej. para el castellano debes copiar ‘Catalogs/espa�ol/FlexCat.catalog’ en ‘Locale:Catalogs/espa�ol/FlexCat.catalog’ o ‘PROGDIR:Catalogs/espa�ol/FlexCat.catalog’, donde ‘PROGDIR:’ es el directorio del programa FlexCat. See section Incluyendo fuentes de FlexCat en programas propios.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3 Llamando a FlexCat desde el CLI

Flexcat es un programa basado en el CLI y no funciona desde el Workbench. Su sintaxis de llamada es

    FlexCat CDFILE/a,CTFILE,CATALOG/k,NEWCTFILE/k,SOURCES/m

donde el significado de los argumentos es

CDFILE

es el nombre de la descripci�n de cat�logo a leer. Siempre es necesario. Se�alar que el nombre base de la descripci�n de fuente se crea de �ste distinguiendo entre may�sculas y min�sculas. See section Ficheros de descripci�n de fuente.

CTFILE

es el nombre del fichero traducci�n de cat�logo que se leer�. Se necesita para la creaci�n de cat�logos o la actualizaci�n de una traducci�n de cat�logo antigua usando el argumento NEWCTFILE: FlexCat lee el fichero viejo y la descripci�n de cat�logo, y crea un fichero traducci�n de cat�logo nuevo conteniendo las cadenas viejas y, posiblemente, l�neas vac�as para las cadenas nuevas.

CATALOG

es el nombre del fichero cat�logo que se crear�. Este argumento necesita que tambi�n se indique el argumento CDFILE.

NEWCTFILE

es el nombre del fichero traducci�n de cat�logo que se crear�. FlexCat lee, si se d�, cadenas de CTFILE, y las cadenas que falten de la traducci�n de cat�logo se sustituyen con l�neas vac�as. (La nueva traducci�n de cat�logo s�lo contendr� l�neas vac�as como cadenas si se omite el CTFILE).

SOURCES

son los nombres de los ficheros de c�digo fuente que se van a crear. Se deber�a poner en forma de ‘fuente=patr�n’ donde ‘fuente’ es el fichero a crear y ‘patr�n’ es el nombre del fichero de descripci�n de fuente que se analizar�.

Ver Vistazo para ejemplos de l�neas de comandos.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4 Ficheros de descripci�n de cat�logo

Un fichero descripci�n de cat�logo contiene cuatro tipos de l�neas.

L�neas de comentario

Cualquier linea que empieze por un punto y coma se supone una l�nea de comentario, y por tanto se ignora. (Las siguientes l�neas de cadena son una excepci�n y pueden empezar con un punto y coma).

L�neas de comando

Cualquier l�nea que empieze con un ’#’ (con la misma excepci�n que antes) se suponen l�neas de comando. Los posible comandos son:

#language <cad>

indica el idioma por defecto del programa, el idioma de las cadenas de la descripci�n de cat�logo. Por defecto es ‘#laguage english’.

#version <num>

indica el n�mero de versi�n de los cat�logos a abrir. Se�alar que este n�mero debe coincidir exactamente y no ser el mismo o superior como en Exec/Openlibrary. Una excepci�n es el n�mero 0, que acepta cualquier cat�logo. El valor por omisi�n es ‘#versi�n 0’. En Locale/OpenCatalog encontrar�s m�s informaci�n sobre el idioma del cat�logo y la versi�n.

#lengthbytes <num>

Indica a Flexcat que ponga el n�mero de bytes dado antes de cada cadena que contenga su longitud. La longitud es el n�mero de bytes de la cadena sin bytes de longitud ni el byte ‘NUL’ del final. (Los ficheros cat�logo, y por tanto las cadenas del cat�logo siempre tendr�n un byte ‘NUL’ al final. Esto no siempre es cierto para las cadenas por defecto, depende del fichero de descripci�n de fuente). ‘<num>’ debe estar entre 0 y sizeof(long)=4, por omisi�n es ‘#lengthbytes 0’.

#basename <cad>

Pone el nombre-base de la descripci�n de fuente. See section Ficheros de descripci�n de fuente. Esto anula el nombre-base del argumento CDFILE de la l�nea de comandos. See section Llamando a FlexCat desde el CLI.

En los comandos no se distinguen may�sculas de min�scalas.

L�neas de descripci�n

declaran una cadena. Son de la forma ‘IDCAD (id/longmin/longmax)’ donde ‘IDCAD’ es un identificador (cadena que consta de los caracteres a-z,A-Z y 0-9), ‘id’ es un n�mero �nico (desde ahora lo llamaremos ID), ‘longmin’ y ‘longmax’ son la longitud m�nima y m�xima respectivamente de la cadena. Los tres �ltimos se pueden omitir (�aunque no los caracteres ‘(//)’!), en cuyo caso FlexCat elige un n�mero y no restringe la longitud de la cadena. Lo mejor es no usar los IDs si no los necesitas. Las l�neas que las siguen son

L�neas de cadena

contienen la propia cadena y nada m�s. Pueden contener ciertos caracteres de control que empiezan con una barra inversa:

\b

Borra atr�s (Ascii 8)

\c

CSI (Introductor de Sequencia de Control) (Ascii 155)

\e

Escape (Ascii 27)

\f

Salto p�gina (Ascii 12)

\g

Pitido pantalla (Ascii 7)

\n

Salto de l�nea, (newline) (Ascii 10)

\r

Retorno de Carro (Ascii 13)

\t

Tabulador (Ascii 9)

\v

Tabulador Vertical (Ascii 11)

\)

El par�ntesis final que puede necesitarse como parte de una sequencia ‘(..)’, ver Ficheros de descripci�n de fuente.

\\

La propia barra inversa.

\xHH

El caracter dado por el c�digo ASCII ‘HH’, donde ‘HH’ son d�gitos hexadecimales.

\OOO

El caracter dado por el c�digo ASCII ‘OOO’, donde ‘OOO’ son d�gitos octales.

Finalmente, una barra inversa s�la al final de la l�nea provoca la concatenaci�n con la siguente l�nea. Esto permite usar cadenas de cualquier longitud, FlexCat no hace suposiciones sobre la longitud de la cadena.

Por tanto, una cadena se d� con una l�nea de descripci�n seguida de un l�nea de cadena. Veamos un ejemplo:

    msgHola (/4/)
    �Hola, esto es castellano!\n

Aqu� se omite el ID, por lo que FlexCat elige un n�mero apropiado. El n�mero 4 indica a FlexCat que la cadena siguiente no debe tener menos de 4 caracteres, y que puede ser de cualquier longitud. Mira en el fichero ‘FlexCat.cd’ para m�s ejemplos.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5 Ficheros traducci�n de cat�logo

Los ficheros traducci�n de cat�logo son bastante parecidos a las descripciones de cat�logo, a excepci�n de comandos diferentes y por no tener informaci�n sobre el ID de cadena ni sobre la longitud. (�stos se toman de la descripci�n de cat�logo). Deben aparecer todas las cadenas de la descripci�n de cat�logo, (sin embargo, FlexCat no escribe en el cat�logo las cadenas que son id�nticas a la cadena por omisi�n), y no debe tener identificadores adicionales. Esto se puede asegurar f�cilmente si se usa FlexCat para crear las traducciones de cat�logo nuevas. See section Vistazo.

Los comandos que se permiten en traducciones de cat�logo son:

##version <cad>

Indica la versi�n del cat�logo en forma de cadena de Versi�n de AmigaDOS. Ejemplo:

##version $VER: English.ct 8.1 (22.05.94)

El n�mero de versi�n de este cat�logo es 8. De hecho, la versi�n de la descripci�n de cat�logo debe ser 0 u 8.

##language <cad>

El idioma del cat�logo. Por supuesto, debe ser otro idioma distinto del idioma de la descripci�n de cat�logo. Los comandos ‘##language’ y ‘##version’ deben estar presentes en la traducci�n de cat�logo.

##codeset <num>

Actualmente no se usa, debe ser 0. Este es el valor por defecto.

La cadena de antes ser�a algo como lo siguiente en la traducci�n de cat�logo:

    msgHola
    Hello, this is english!\n

Mira en ‘Espa�ol.ct’ para m�s ejemplos de una traducci�n de cat�logo.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6 Ficheros de descripci�n de fuente

Esta es la parte especial de FlexCat. Hasta ahora no hay nada que no puedan ofrecer CatComp, KitCat u otros. El c�digo fuente creado debe hacer f�cil el uso de los cat�logos sin perder flexibilidad. Deber�a poder utilizarse cualquier lenguaje de programaci�n y deber�a poder satisfacerse cualquier requisito. Esto parece una contradici�n, pero la soluci�n de FlexCat son los ficheros descripci�n de fuente que contienen un patr�n del c�digo fuente que se crear�. �stos son editables de la misma forma que lo son los ficheros descripci�n de cat�logo y traducci�n de cat�logo, por ello, FlexCat puede crear cualquier c�digo.

Se analizan las descripciones de fuente para encontrar ciertos s�mbolos que se substituyen por ciertos valores. S�mbolos posibles son los caracteres de barra inversa anteriores y, adem�s, secuencias que empiezen con ‘%’. (Esto lo conocen bien los programadores en C).

%b

es el nombre base de la descripci�n de cat�logo. See section Llamando a FlexCat desde el CLI.

%v

es el n�mero de versi�n de la descripci�n de cat�logo. No lo confundas con la cadena de versi�n de la traducci�n de cat�logo.

%l

es el idioma de la descripci�n de cat�logo. Se�alar que �sta se inserta como una cadena. Mira ‘%’ m�s adelante.

%n

es el n�mero de cadenas de la descripci�n de cat�logo.

%%

es el propio caracter ‘%’.

Pero lo m�s importante son las siguientes secuencias. �stas representan a las cadenas del cat�logo de diferentes formas. Las l�neas que contienen uno o m�s de estos s�mbolos se repiten para cada cadena.

%i

es el identificador de la descripci�n de cat�logo.

%d

es el ID de la cadena.

%s

es la propia cadena; se insertar� dependiendo del lenguaje de programaci�n, y se puede controlar con los comandos ‘##stringtype’ y ‘##shortstrings’.

%(...)

inserta el texto entre los par�ntesis en todas las cadenas menos en la �ltima. Esto se necesitar� probablemente en vectores si las entradas del vector se deben separar con comas pero la �ltima no se debe seguir con una coma. Se�alar que entre los par�ntesis no se substituir�n las secuencias ‘%’. Se permiten, sin embargo, las secuencias de barra inversa.

Las secuencias de control ‘%l’ y ‘%s’ crean cadenas. Aunque la forma en que queden las cadenas depende del lenguaje de programaci�n. Ese es el motivo de que la descripci�n de fuente permita l�neas similares a las de la traducci�n de cat�logo. �stas deben empezar con el primer caracter de la l�nea y cada comando debe tener su propia l�nea. Los posibles comandos son:

##shortstrings

hace que las cadenas m�s largas se dividan en varias l�neas. Esto no siempre ser� posible o no estar� implementado en FlexCat, y por ello, la opci�n por defecto es crear s�lo una cadena, probablemente, bastante larga.

##stringtype <tipo>

Indica a FlexCat c�mo deben aparecer las cadenas. Los tipos posibles son:

None

No se crean caracteres adicionales. Se inserta una imagen de la cadena y nada m�s. No se pueden poner caracteres binarios (las secuencias con barra inversa).

C

crea cadenas de acuerdo con el C. Las cadenas se preceden y finalizan con el caracter ‘"’. Las cadenas se dividen usando secuencias ‘"\’ al final de la l�nea y ‘"’ al principio de la nueva l�nea. (La barra inversa se necesita en macros). Los caracteres binarios se insertan usando ‘\OOO’. See section Fuentes de FlexCat en programas en C.

Oberon

es como el tipo de cadena C, excepto por la barra final al final de la l�nea.

Assembler

Las cadenas se crean usando ‘dc.b’. Los caracteres ASCII legibles se preceden y siguen con el caracter ‘'’, los caracteres binarios se insertan como ‘$XX’. See section Fuente de FlexCat en programas en ensamblador.

E

Las cadenas se preceden y siguen con el caracter ‘'’. Un ‘+’ concatena cadenas que se reparten por varias l�neas. Los caracteres binarios se insertan de la misma forma que en C.

Veamos un fragmento del fichero ‘C_h.sd’ creando un fichero include para el lenguaje de programaci�n C.

##stringtype C
##shortstrings

#ifndef %b_CAT_H    /* Nos aseguramos de que s�lo se lea una vez. */
#define %b_CAT_H

/*  Leemos los dem�s includes */
#include <exec/types.h>
#include <libraries/locale.h>

/*  Prototipos	*/
extern void Open%bCatalog(struct Locale *, STRPTR);
extern void Close%bCatalog(void);
extern STRPTR Get%bString(LONG);

/*  Definiciones de los identificadores y sus IDs. */
/*  Esta l�nea se repetir� para cada cadena.	   */
#define %i %d

#endif

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7 Incluyendo fuentes de FlexCat en programas propios

Por supuesto, esto depende del tipo de c�digo fuente que se desee crear, y por tanto de la descripci�n de fuente. De lo que estamos hablando aqu� es de los ficheros descripci�n de fuente que se distribuyen con FlexCat. See section Ficheros de descripci�n de fuente.

Todas las descripciones de fuente deber�an permitir el uso del programa sin la locale.library. Sin embargo, debe estar presente una variable llamada ‘LocaleBase’ (‘_LocaleBase’ para ensamblador) e inicializarse con NULL o con una llamada a Exec/OpenLibrary. En el primer caso no es posible la localizaci�n a no ser que se use el fichero de descripci�n de fuente ‘C_c_V20.sd’. �ste permite la localizaci�n bajo 2.0 sustituyendo la locale.library por la iffparse.library. (Para ello debe estar presente e inicializada una variable ‘IFFParseBase’ como con ‘LocaleBase’). See section Fuentes de FlexCat en programas en C. El programador no necesita conocer estas librer�as a no ser que quiera crear sus propias descripciones de fuente.

Hay tres funciones, y llamarlas es bastante sencillo.

: OpenCatalog (locale, idioma)

Esta funci�n probablemente abrir� el cat�logo. El argumento locale es un puntero a la estructura Locale y idioma es una cadena que contiene el nombre del idioma que se deber�a abrir. En la mayor�a de los casos deber�an ser ambos ‘NULL’ o ‘NIL’, respectivamente, ya que en otro caso se anulan los valores que predefine el usuario. Para m�s detalles mira en Locale/OpenCatalog.

Si el usario tiene ‘espa�ol’ y ‘Deutsch’ como idiomas por omisi�n y el nombre base del programa es ‘XXX’, buscar� los siguientes ficheros:

PROGDIR:Catalogs/espa�ol/XXX.catalog’
    ‘LOCALE:Catalogs/espa�ol/XXX.catalog’
    ‘PROGDIR:Catalogs/Deutsch/XXX.catalog’
    ‘LOCALE:Catalogs/Deutsch/XXX.catalog

donde ‘PROGDIR:’ es el directorio actual del programa. (Se puede cambiar el orden de ‘PROGDIR:’ y ‘LOCALE:’ para evitar los requeters del tipo ‘Inserta volumen YYY’.

OpenCatalog es de tipo void (para programadores en Pascal un procedimiento) y por tanto no devuelve nada.

: GetString (ID)

Devuelve un puntero a la cadena con ese ID de la descripci�n de cat�logo. Por supuesto estas cadenas son propiedad de locale.library y no se deben modificadar.

Podr�a ser �til un ejemplo. Cojamos la cadena de la descripci�n de cat�logo del ejemplo, que se llamaba msgHola. Las descripciones de fuente declaran una cosntante ‘msgHola’ representando el ID. Se podr�a imprimir en C usando:

    printf("%s\n", GetString(msgHola));
: CloseCatalog (void)

Esta funci�n libera el cat�logo (que est� reservado en RAM) antes de terminar el programa. Puedes llamar a esta fucni�n en cualquier momento, incluso antes de llamar a OpenCatalog.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.1 Fuentes de FlexCat en programas en C

El fuente en C cosiste en dos partes: Un fichero ‘.c’ que deber�a compilar y linkar sin problemas, y un fichero include que deber�a incluirse desde cualquier parte del fuente que use cadenas de cat�logo y el cual define los IDs como macros.

Hay dos versiones diferentes para la parte ‘.c’: ‘C_c_V21.sd’ es un versi�n bastante simple usando las funciones correspondientes de la locale.library y que permite la localizaci�n a partir del Workbench 2.1. Por otro lado la ‘C_c_V20.sd’ substituye la locale.library con la iffparse.library si la primera no est� disponible y lo est� la �tlima. Esto permite la localizaci�n para el Workbench 2.0 tambi�n. Los programas que usen �sta deber�an tener una opci�n Idioma y dar el argumento correspondiente a ‘OpenCatalog’. Esta opci�n no se deber�a usar en 2.1 y posteriores, y por ello el argumento de idioma de ‘OpenCatalog’ deber�a seguir siendo ‘NULL’.

Por supuesto, ser�a posible escribir una tercera versi�n usando cat�logos con Ansi-C, pero no quiero soportar la 1.3 m�s.

Para diferenciar las funciones ‘OpenCatalog’ y ‘CloseCatalog’ de las funciones respectivas de Locale con los mismos nombres, y para permitir diferentes cat�logos en un mismo programa, las funciones de FlexCat obtienen nombres ligeramente modificados: ‘OpenXXXCatalog’ y ‘CloseXXXCatalog’, donde ‘XXX’ es el nombre base de la descripci�n de fuente. El concepto ha sido copiado de GadToolsBox y, seg�n creo, parece bueno. See section Ficheros de descripci�n de fuente.

Los prototipos de las funciones son:

    void OpenXXXCatalog(struct Locale *loc, char *idioma);
    STRPTR GetXXXString(ULONG);
    void CloseXXXCatalog(void);

Mira en HolaMundoLocal.c para ver un ejemplo. (see section Vistazo)


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.2 Fuentes de FlexCat en programas en Oberon

Hay dos descripciones de fuentes diferentes: ‘Oberon_V38.sd’ crea el fuente usando ‘Locale.mod’ de Harmut Goebel. ‘Oberon_V39.sd’ crea el fuente usando el ‘Locale.mod’ distribuido con AmigaOberon.

Los prototipos de las funciones son:

    XXX.OpenCatalog(loc: Locale.LocalePtr; idioma : ARRAY OF CHAR);
    XXX.GetString(num: LONGINT): Exec.StrPtr;
    XXX.CloseCatalog();

donde ‘XXX’ es el nombre base de la descripci�n de fuente. See section Ficheros de descripci�n de fuente.

Finalmente veamos un ejemplo de fuente de FlexCat:

    MODULE HolaMundoLocal;

    IMPORT  x:=HolaMundoLocal_Cat; Dos;

    BEGIN
      x.OpenCatalog(NIL, "");

      Dos.PrintF("%s\n", x.GetString(x.msgHola));
      (* El cat�logo se cerrar� autom�ticamente  *)
      (* al finalizar el programa.               *)
    END CualquierCosa;

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.3 Fuente de FlexCat en programas en ensamblador

El fuente en ensamblador se crea para usarlo con el ensamblador de Aztec. No debr�a ser muy diferente a otros ensambladores y deber�as ser capaz de implementar descripciones de fuente propias. El fuente consiste de dos partes: Un fichero ‘.asm’ que deber�a ensamblarse y linkarse sin problemas, y un fichero include ‘.i’ que define los IDs de las cadenas y debe incluirse en el porgrama que las use.

Como siempre, el resultado de la funci�n se da en d0, y las funciones guardan los registros d2-d7 y a2-a7. OpenCatalog espera sus argumentos en a0 (un puntero a una estructura Locale) y a1 (puntero a la cadena del idioma), que deber�an ser NULL en la mayor�a de los casos. GetString espera el ID de cadena en d0.

Finalmente, veamos un programa de ejemplo usando fuentes de FlexCat:

*   HolaMundoLocal.asm
    include "XXX.i" ; Es obligatorio abrirlo. Contiene
		    ; "xref OpenHolaMundoLocalCatalog", ...
    xref    _LVOOpenLibrary
    xref    _LVOCloseLibrary
    xref    _AbsExecBase

    dseg
LocNam: dc.b	"locale.library",0
    dc.l    _LocaleBase,4	; Debe estar con este nombre

    cseg
main:	 move.l  #38,d0 	; Abre la locale.library
    lea LocName,a1
    move.l  _AbsExecBase.a6
    jsr _LVOOpenLibrary(a6)
*   NO salir si falla OpenLibrary
    sub.l   a0,a0		; Abre el cat�logo
    sub.l   a1,a1
    jsr OpenHolaMundoLocalCatalog

    move.l  #msgHola,d0 	; Obtiene puntero a la cadena
    jsr GetHolaMundoLocalString
    jsr PrintD0 		; y la imprime

Final:
    jsr CloseHolaMundoLocalCatalog ; Cierra el Cat�logo
    move.l  _LocaleBase,a1	   ; Cierra la locale.library
    move.l  a1,d0		   ; este test es necesario para 1.3
    beq Final1
    jsr CloseLibrary
Final1:
    rts
    end

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4 Fuentes de FlexCat en programas en E

E se diferencia dr�sticamente de otros lenguajes de programaci�n en un punto: No puedes compilar m�dulos separados y luego linkarlos juntos. Todo el c�digo fuente debe estar en un fichero. La mejor soluci�n a este problema es usar EPP de Barry Wills. (Origen: Aminet, directorio ‘dev/e’, disco de Fred Fish). Esto te permite integrar los fuentes creados con la descripci�n de fuente E21b.sd en una l�nea:

    PMODULE 'xxx_cat'

donde xxx es el nombre-base de tu aplicaci�n. Sin EPP necesitas insertar el fuente de FlexCat manualmente en tu propio fuente. Debes insertar el fuente despu�s de tus propias definiciones, y antes del primer procedimiento. (De otra forma estar�as obligado a crear e insertar m�s de un fichero con c�digo fuente de FlexCat).

Las funciones ‘get_xxx_string’, ‘open_xxx_catalog’ y ‘close_xxx_catalog’ est�n en el c�digo fuente creado. (Estos nombres ligeramente modificados se necesitan para permitir cat�logos diferentes en un mismo programa). Se�alar que (al contrario que en C, por ejemplo) �no debes llamar a get_xx_string antes de open_xx_catalog!

Un ‘HolaMundoLocal.e’ usando EPP podr�a parecerse a:

    /*	HolaMundoLocal.e  */

    PMODULE holamundolocal_cat

    PROC main()
    /*	Abre Locale.library; �No salir, si falla!  */
    localebase := OpenLibrary('locale.library', 0)

    /*	Abre el fichero cat�logo.			    */
	open_holamundolocal_catalog(NIL, NIL)

	WriteF('\s\n', get_holamundolocal_string(MSG_HOLA_MUNDO))

	close_holamundolocal_catalog()
    ENDPROC

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Pr�ximo desarrollo de FlexCat

No espero mucho m�s desarrollo de FlexCat porque que pienso que ya es bastante completo. Por supuesto, estoy abierto a sugerencias, trucos o cr�ticas. Especialmente, me ofrezco a incluir nuevos tipos de cadenas, ya que �sto se puede hacer con cambios m�nimos.

Estar�a muy agradecido si me enviarais cualquie nueva descripcione de fuente para poder incluirlas en pr�ximas distribiciones. Cualquier lenguaje de programaci�n, cualquier extensi�n, siempre y cuando se haya comprobado bien el c�digo fuente en un programa real. Tambien apreciar�a recibir nuevos cat�logos. Es suficiente insertar las cadenas en el fichero ‘NewCatalogs.ct’ que es parte de la distribuci�n.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Cr�ditos

Agradezco especialmente a:

Albert Weinert

por KitCat, el predecesor de FlexCat que me hizo grandes cosas, pero que finalmente no era lo suficientemente flexible.

Reinhard Spisser und Sebastiano Vigna

por la versi�n de texinfo para Amiga. Esta documentaci�n est� escrita utiliz�ndolo. (La traducci�n tambi�n :-)).

The Free Software Foundation

por la versi�n original de texinfo y muchas otras excelentes cosas.

Matt Dillon

por DICE y especialmente por DME.

Alessandro Galassi

por el cat�logo italiano.

Lionel Vintenat

por la descripci�n de fuente de E y su documentaci�n, los cat�logos en franc�s y por informar sobre errores.

The people of #AmigaGer

por contestarme muchas preguntas est�pidas, y por la diversi�n, por ejemplo stefanb (Stefan Becker), PowerStat (Kai Hoffmann), \ ill (Markus Illenseer), Quarvon (J�rgen Lang), ZZA (Bernhard M�llemann), Tron (Mathias Scheler), mungo (Ignatios Souvlatzis), \ jow (J�rgen Weinelt) und Stargazer (Petra Zeidler).

Commodore

por el Amiga y el Kickstart 2.0. Seguid desarrollando sobre �l y siguir� siendo un usuario de Amiga durante los pr�ximos 8 a�os. ;-)

La traducci�n a castellano de este manual, as� como de los cat�logos del programa han sido realizados por:

	  Antonio Joaqu�n Gomez Gonzalez
	  C/ Venezuela, 14 - 2 I
	  33213 Gijon - Asturias (ESPA�A)
	  E-mail: u0868551@oboe.etsiig.uniovi.es (m�nimo hasta Sept. 94)

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

�ndice

Jump to:   .  
A   C   D   E   F   I   O   R   T   U   V   W  
Index Entry  Section

.
.cd 4 Ficheros de descripci�n de cat�logo
.ct 5 Ficheros traducci�n de cat�logo
.sd 6 Ficheros de descripci�n de fuente

A
AztecAs_asm.sd 7.3 Fuente de FlexCat en programas en ensamblador
AztecAs_i.sd 7.3 Fuente de FlexCat en programas en ensamblador

C
C 7.1 Fuentes de FlexCat en programas en C
Caracteres de control 4 Ficheros de descripci�n de cat�logo
CLI 3 Llamando a FlexCat desde el CLI
Codigo-ASCII 4 Ficheros de descripci�n de cat�logo
Contribuciones Pr�ximo desarrollo de FlexCat
Creditos Cr�ditos
C_c_V20.sd 7.1 Fuentes de FlexCat en programas en C
C_c_V21.sd 7.1 Fuentes de FlexCat en programas en C
C_h.sd 7.1 Fuentes de FlexCat en programas en C

D
Descripcion de catalogo 4 Ficheros de descripci�n de cat�logo
Descripcion de fuente 6 Ficheros de descripci�n de fuente

E
E 7.4 Fuentes de FlexCat en programas en E
E21b.sd 7.4 Fuentes de FlexCat en programas en E
E21b_defs.sd 7.4 Fuentes de FlexCat en programas en E
E21b_procs.sd 7.4 Fuentes de FlexCat en programas en E
English.ct 5 Ficheros traducci�n de cat�logo
Ensamblador 7.3 Fuente de FlexCat en programas en ensamblador
EPP 7.4 Fuentes de FlexCat en programas en E

F
FlexCat Pr�ximo desarrollo de FlexCat
FlexCat.cd 4 Ficheros de descripci�n de cat�logo
Fuentes FlexCat 7 Incluyendo fuentes de FlexCat en programas propios
Futuro Pr�ximo desarrollo de FlexCat

I
Instalaci�n 2 Instalaci�n

O
Oberon 7.2 Fuentes de FlexCat en programas en Oberon
Oberon_V38.sd 7.2 Fuentes de FlexCat en programas en Oberon
Oberon_V39.sd 7.2 Fuentes de FlexCat en programas en Oberon

R
Requisitos 2 Instalaci�n

T
Traduccion de catalogo 5 Ficheros traducci�n de cat�logo

U
Usando fuentes FlexCat 7 Incluyendo fuentes de FlexCat en programas propios

V
Vistazo 1 Vistazo

W
Workbench 3 Llamando a FlexCat desde el CLI

Jump to:   .  
A   C   D   E   F   I   O   R   T   U   V   W  

[Top] [Contents] [Index] [ ? ]

Table of Contents


[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated on April 14, 2022 using texi2html 5.0.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ << ] FastBack Beginning of this chapter or previous chapter 1
[ < ] Back Previous section in reading order 1.2.2
[ Up ] Up Up section 1.2
[ > ] Forward Next section in reading order 1.2.4
[ >> ] FastForward Next chapter 2
[Top] Top Cover (top) of document  
[Contents] Contents Table of contents  
[Index] Index Index  
[ ? ] About About (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:


This document was generated on April 14, 2022 using texi2html 5.0.